package br.com.vm.dao;

import java.io.Serializable;
import java.util.Collection;

/**
 * Interface designada para estrutura de arquitetura da camada DAO.
 * 
 * @author Rodrigo
 * @param <T>
 */
public interface _GenericDAO<T extends br.com.vm.model.base.Base> extends
		Serializable {

	/**
	 * Metodo que realiza o incrementa ou a atualizacao de um dado na base de
	 * dados.
	 * 
	 * @param t
	 *            .
	 * @return T.
	 */
	public T salvar(T poT) throws Exception;

	/**
	 * Metodo que realiza o incrementa ou a atualizacao de um uma colecao na
	 * base de dados.
	 * 
	 * @param Collection
	 *            .
	 */
	public void salvarTodos(Collection<T> pcCollection) throws Exception;

	/**
	 * Metodo que realiza a remocao de um dado na base de dados.
	 * 
	 * @param t
	 *            .
	 */
	public void remover(T poT) throws Exception;

	/**
	 * Metodos que realiza a remocao de uma lista na base de dados.
	 * 
	 * @param list
	 *            .
	 * @throws Exception.
	 */
	public void removerTodos(Collection<T> pcCollection) throws Exception;

	/**
	 * Metodo que resgata todos os registros armazenados na base de dados de uma
	 * entidade.
	 * 
	 * @return Collection<T>.
	 */
	public Collection<T> listarTodos() throws Exception;

	/**
	 * Metodo que restaga um registro armazenado na base de dados a partir de
	 * seu ID.
	 * 
	 * @param t
	 *            .
	 * @return T.
	 */
	public T procurar(T t) throws Exception;

	public void refresh(T t);
}
